home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / c / gcc / pmllib21.zoo / atan2.s < prev    next >
Encoding:
Text File  |  1992-10-02  |  878 b   |  53 lines

  1. #NO_APP
  2. gcc2_compiled.:
  3. #APP
  4.     
  5. .text
  6. .even
  7. _funcname:
  8.     .ascii    "atan2\0"
  9.     .even
  10.  
  11. .globl    _atan2
  12. _atan2:
  13. | denormalized numbers are treated as 0
  14.     tstl    sp@(12)
  15.     beq    5f        | x == 0!
  16.     blt    1f        | x < 0!
  17.                 | x > 0: return atan(y/x)
  18.  
  19.     fmoved    sp@(4)@,fp0    | get y
  20.     fdivd    sp@(12),fp0    | y/x    
  21.     fatanx    fp0,fp0        | atan(y/x)
  22.     bra 3f            | return
  23. 1:                | x < 0
  24.  
  25.     fmovecr    #0,fp1        | get pi
  26.     fmoved    sp@(4)@,fp0    | get y
  27.     fdivd    sp@(12),fp0    | y/x
  28.     fatanx    fp0,fp0        | atan(y/x)
  29.     btst    #31,sp@(4)    | sign(y)
  30.     beq    2f        | positive!
  31.  
  32.     fnegx    fp1,fp1        | transfer sign
  33. 2:    faddx    fp1,fp0        | sign(y)*pi + atan(y/x)
  34. |    bra 3f            | return
  35. 3:
  36.     fmoved    fp0,sp@-    | return result
  37.     moveml    sp@+,d0/d1
  38. 4:    
  39.     rts            | sigh.
  40. 5:                | x == 0
  41.     movel    #1073291771,d0    | pi/2
  42.     movel    #1413754136,d1    |
  43.  
  44.     tstl    sp@(4)        | 
  45.     beq    6f        | NaN
  46.     bge    4b        | exit
  47.     bset    #31,d0        | x < 0 : return -pi/2
  48.     bra    4b
  49. 6:    movel    #-1,d0        | NaN
  50.     movel    #-1,d1        |
  51.     bra    4b
  52.  
  53.